
/**
* 1.时间格式
* @param {*} date 13位的时间戳
* @param {*} format 
* @returns String
*/
export const formatDate = (date, format = "yyyy-MM-dd hh:mm:ss") => {
  date = new Date(date);
  if (/(y+)/.test(format)) {
    format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  let o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (let k in o) {
    if (new RegExp(`(${k})`).test(format)) {
      let str = o[k] + ''
      format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length));
    }
  }
  return format
}

/**
* 2.时间变年龄
* @param {*} date 13位的时间戳
* @returns Number
*/
export const timeBecomeAge = function (date) {
  var nowDate = new Date();
  var nowYear = nowDate.getFullYear();
  var nowMonth = nowDate.getMonth();
  var nowDay = nowDate.getDate();
  var yourDate = new Date(date);
  var yourYear = yourDate.getFullYear();
  var yourMonth = yourDate.getMonth();
  var yourDay = yourDate.getDate();
  var yourAge = 0;
  if (nowYear > yourYear) {
    yourAge = nowYear - yourYear - 1;
    if (yourMonth < nowMonth || yourMonth == nowMonth && yourDay <= nowDay) {
      yourAge++;
    }
  }
  return yourAge;
}

/**
* 3.计时
* @param {Number} second 秒
* @param {Number} ping 拼接类型 1
* @param {Number} out 输出类型 1
* @returns String
*/
export const calculateTime = (second, ping = 1, out = 1) => {
  let hours = parseInt(parseInt(second / 60) / 60).toString().padStart(2, 0);
  let minute = (parseInt(second / 60) % 60).toString().padStart(2, 0);
  let sec = (parseInt(second) % 60).toString().padStart(2, 0);
  if (ping == 1) {
    if (out == 1) {
      return `${hours}:${minute}:${sec}`;
    } else {
      if (Number(hours) > 0) {
        return `${hours}:${minute}:${sec}`
      }
      if (Number(minute) > 0) {
        return `${minute}:${sec}`
      }
      return `${sec}`
    }
  } else {
    if (out == 1) {
      return `${hours}时${minute}分${sec}秒`;
    } else {
      if (Number(hours) > 0) {
        return `${hours}时${minute}分${sec}秒`;
      }
      if (Number(minute) > 0) {
        return `${minute}分${sec}秒`;
      }
      return `${sec}秒`;
    }
  }
}


/**
 * 计算 当前时间 和传入时间 间隔 几年几月几日, 并返回相应格式
 * @param val
 */

export function setCompareRegistrationTimeText(startDate, endDate) {
  const date = new Date(startDate) // 转换时间格式
  const year = date.getFullYear() // 取当年的年
  const month = date.getMonth() + 1 // 取当年的月(月份加一)
  const dd = date.getDate() // 取当年的日期
  const nowDate = new Date(endDate) // 取现在的时间
  const nowYear = nowDate.getFullYear() // 取现在的年
  const nowMonth = nowDate.getMonth() + 1 // 取现在的月(月份加一)
  const nowDd = nowDate.getDate() // 取现在的日期
  /**
   * 日期计算(结束 - 开始)
   * 1-1当差值为正，就相差多少天
   * 1-1-1例如: (2021/3/15 - 2022/4/18) ===== 18-15 > 0 日期相差3天
   * 1-2当差值为负，计算从开始时间的日期到结束时间的日期相差几天
   * 1-2-1例如：(2021/3/15 - 2022/4/10) ===== 10-15 < 0
   * 其实就是计算从3/15 到 4、10号中间过了多少天
   * 1-2-1-1：方法： 其实就是计算3/15 到 3/31 号过了多少天，再加上 4月过的10天
   */
  const restDd =
    nowDd - dd < 0 ? lastDay(nowMonth - 1, year) - dd + nowDd : nowDd - dd
  /**
   * 月份计算(结束 - 开始)
   * 1-1当差值为正，就相差多少月
   * 1-1-1例如: (2021/3/15 - 2022/4/18) ===== 4-3 > 0 月份相差1月
   * 1-2当差值为负，计算从开始时间的月份到结束时间的月份相差几天
   * 1-2-1例如：(2021/5/15 - 2022/4/10) ===== 4-5 < 0
   * 其实就是计算从5月到第二年4月过了多少月
   * 1-2-1-1：方法： 向年借一年为12月计算过了多少月
   */
  const restMonth =
    nowMonth - month < 0 ? 12 + nowMonth - month : nowMonth - month
  /**
   * 年份计算(结束 - 开始)
   * 直接限制结束比开始大，只有0/正数
   */
  const restYear = nowYear - year
  /**
   * 计算借位的问题
   */
  let resultMonth = restMonth
  let resultYear = restYear
  // 日期小说明借了月
  if (nowDd < dd) {
    resultMonth = restMonth - 1 < 0 ? restMonth - 1 + 12 : restMonth - 1
  }
  // 月份小借了年 或者 日期小，月份刚好一致，因为日期借了月份，导致月份减1，所以减年
  if (nowMonth < month || (nowDd < dd && nowMonth === month)) {
    resultYear = restYear - 1
  }
  let str = {
    year: resultYear,
    month: resultMonth,
    day: restDd
  }
  return str
}
/**
 * 判断每年的每个月的最后一天是几号
 * @param mo-月份
 * @param year-年份
 * @returns {number}
 */
export function lastDay(mo, year) {
  if (mo === 4 || mo === 6 || mo === 9 || mo === 11) {
    return 30
  }
  //2月
  else if (mo === 2) {
    if (isLeapYear(year)) {
      return 29
    } else {
      return 28
    }
  }
  //大月
  else {
    return 31
  }
}
/**
 * 判断是否是闰年
 * @param Year-年份
 * @returns {boolean}
 */
export function isLeapYear(Year) {
  return (Year % 4 === 0 && Year % 100 !== 0) || Year % 400 === 0
}

// “平台使用年限”的返回字段，只要“入驻平台时间”和“合约到期时间”不存在，返回“-”，否则使用函数“setCompareRegistrationTimeText”去计算
export function timeBetweenTimeText(start, end) {
  if (!start || !end) {
    return "--";
  }
  if (start.length < 13) {
    start = +start * 1000
  }
  if (end.length < 13) {
    end = +end * 1000
  }
  let obj = setCompareRegistrationTimeText(start, end);
  return `${obj.year}年${obj.month}月`;
}

/**
 * 计算两个时间戳的间隔天数
 * @param currentTime 当前时间
 * @param targetTime 目标时间
 * @returns {Number} //两个时间戳间隔多少天
*/

export function calcCurrentTargetTime(currentTime, targetTime) {
  let result = targetTime - currentTime;
  result = Math.ceil(result / 60 / 60 / 24);
  return result;
}

export function formatDuration(seconds) {
  const minutes = Math.floor(seconds / 60);
  const remainingSeconds = seconds % 60;
 
  // 使用 padStart 方法来确保分钟和秒数都是两位数
  const formattedMinutes = String(minutes).padStart(2, '0');
  const formattedSeconds = String(remainingSeconds).padStart(2, '0');
 
  return `${formattedMinutes}:${formattedSeconds}`;
}


//结束时间减去开始时间获取天数
export function getDay(endTime,startTime) {
  const diffInMilliseconds = (endTime * 1000) - (startTime * 1000); // 转换为毫秒
  const diffInDays = diffInMilliseconds / (1000 * 60 * 60 * 24);
  return Math.ceil(diffInDays);
}

//秒转为年月日时分秒格式

export function convertTimestampToDateTime(timestamp) {
  // 将秒级时间戳转换为毫秒级
  const date = new Date(timestamp * 1000);
 
  // 获取年月日时分秒
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
 
  // 格式化为 YYYY-MM-DD HH:MM:SS
  const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  return formattedDateTime;
}

function getValidDate(timestamp) {
 const date = new Date(timestamp);
 return isNaN(date.getTime()) ? null : date;
}

/**
* 中国标准时间转为年月日 "2025-02-12" 格式
* @param {number|string} timestamp - 时间戳
* @returns {string|null} - 格式化后的日期字符串或 null
*/
export function convertYearMonthDay(timestamp) {
 const date = getValidDate(timestamp);
 if (!date) return null;

 const year = date.getFullYear();
 const month = String(date.getMonth() + 1).padStart(2, '0');
 const day = String(date.getDate()).padStart(2, '0');

 return `${year}-${month}-${day}`;
}

/**
* 中国标准时间转为月日 "2月12日" 格式
* @param {number|string} dateString - 时间戳或日期字符串
* @returns {string|null} - 格式化后的日期字符串或 null
*/
export function convertMonthDay(dateString) {
 const date = getValidDate(dateString);
 if (!date) return null;

 const months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
 const month = months[date.getMonth()];
 const day = date.getDate();

 return `${month}${day}日`;
}



//将中国标准时间转为时间戳
export function getTimestamp(dateString) {
  const date = new Date(dateString);
 
  // 获取时间戳（毫秒）
  return date.getTime();
}

//将时间戳转为2024/9/20格式
export function timestampToUTCDate(timestamp,type) {
  // 转换为毫秒并创建Date对象
  const date = new Date(timestamp * 1000);
  
  // 使用UTC方法获取年月日
  const year = date.getUTCFullYear();
  const month = date.getUTCMonth() + 1; // 月份从0开始
  const day = date.getUTCDate();
  
  // 格式化为 YYYY/MM/DD（去掉前导零）
  if(type=='transverseLine'){
    return `${year}-${month}-${day}`.replace(/\/0/g, '/');
  }else{
    return `${year}/${month}/${day}`.replace(/\/0/g, '/');}
}



//时间戳转为YYYY-MM-DD HH:MM:SS格式截取HH:MM:SS
export function cutOutHMS(timestamp) {
  const date = new Date(timestamp);
  return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`;
}

